Commit 1fb6dd0f authored by argon.sun's avatar argon.sun

hint

parent 132f43cd
......@@ -1263,6 +1263,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
myswprintf(formatBuffer, L"\n%ls%ls", dataManager.GetSysString(214), dataManager.FormatAttribute(mcard->chValue));
else if(mcard->cHint == CHINT_NUMBER)
myswprintf(formatBuffer, L"\n%ls%d", dataManager.GetSysString(215), mcard->chValue);
else if(mcard->cHint == CHINT_DESC)
myswprintf(formatBuffer, L"\n%ls", dataManager.GetSysString(mcard->chValue));
str.append(formatBuffer);
}
} else {
......@@ -1289,6 +1291,8 @@ bool ClientField::OnEvent(const irr::SEvent& event) {
myswprintf(formatBuffer, L"\n%ls%ls", dataManager.GetSysString(214), dataManager.FormatAttribute(mcard->chValue));
else if(mcard->cHint == CHINT_NUMBER)
myswprintf(formatBuffer, L"\n%ls%d", dataManager.GetSysString(215), mcard->chValue);
else if(mcard->cHint == CHINT_DESC)
myswprintf(formatBuffer, L"\n%ls", dataManager.GetSysString(mcard->chValue));
str.append(formatBuffer);
}
}
......
......@@ -776,6 +776,12 @@ int32 card::add_effect(effect* peffect) {
pduel->game_field->effects.cheff.insert(peffect);
if(peffect->flag & EFFECT_FLAG_COUNT_LIMIT)
pduel->game_field->effects.rechargeable.insert(peffect);
if(peffect->flag & EFFECT_FLAG_CLIENT_HINT) {
pduel->write_buffer8(MSG_CARD_HINT);
pduel->write_buffer32(get_info_location());
pduel->write_buffer8(CHINT_DESC);
pduel->write_buffer32(peffect->description);
}
return peffect->id;
}
void card::remove_effect(effect* peffect) {
......@@ -830,6 +836,12 @@ void card::remove_effect(effect* peffect, effect_container::iterator it) {
counters.erase(cmit);
}
}
if(peffect->flag & EFFECT_FLAG_CLIENT_HINT) {
pduel->write_buffer8(MSG_CARD_HINT);
pduel->write_buffer32(get_info_location());
pduel->write_buffer8(CHINT_DESC);
pduel->write_buffer32(0);
}
pduel->game_field->core.reseted_effects.insert(peffect);
}
int32 card::copy_effect(uint32 code, uint32 reset, uint32 count) {
......
......@@ -152,7 +152,7 @@ public:
#define EFFECT_FLAG_EVENT_PLAYER 0x800000 //
#define EFFECT_FLAG_OWNER_RELATE 0x1000000 //
#define EFFECT_FLAG_AVAILABLE_BD 0x2000000 //
#define EFFECT_FLAG_CLIENT_HINT 0x4000000 //
//========== Codes ==========
#define EFFECT_IMMUNE_EFFECT 1 //
#define EFFECT_DISABLE 2 //
......
......@@ -631,6 +631,7 @@ public:
#define CHINT_RACE 3
#define CHINT_ATTRIBUTE 4
#define CHINT_NUMBER 5
#define CHINT_DESC 6
//Messages
#define MSG_RETRY 1
#define MSG_HINT 2
......
......@@ -759,8 +759,11 @@ int32 scriptlib::card_register_flag_effect(lua_State *L) {
int32 flag = lua_tointeger(L, 4);
int32 count = lua_tointeger(L, 5);
int32 lab = 0;
int32 desc = 0;
if(lua_gettop(L) >= 6)
lab = lua_tointeger(L, 6);
if(lua_gettop(L) >= 7)
desc = lua_tointeger(L, 7);
if(count == 0)
count = 1;
if(reset & (RESET_PHASE) && !(reset & (RESET_SELF_TURN | RESET_OPPO_TURN)))
......@@ -775,6 +778,7 @@ int32 scriptlib::card_register_flag_effect(lua_State *L) {
peffect->flag = flag | EFFECT_FLAG_CANNOT_DISABLE;
peffect->reset_count |= count & 0xff;
peffect->label = lab;
peffect->description = desc;
pcard->add_effect(peffect);
interpreter::effect2value(L, peffect);
return 1;
......@@ -1702,7 +1706,7 @@ int32 scriptlib::card_set_hint(lua_State *L) {
duel* pduel = pcard->pduel;
uint32 type = lua_tointeger(L, 2);
uint32 value = lua_tointeger(L, 3);
if(type > CHINT_NUMBER)
if(type > CHINT_DESC)
return 0;
pduel->write_buffer8(MSG_CARD_HINT);
pduel->write_buffer32(pcard->get_info_location());
......
......@@ -1101,7 +1101,8 @@ int32 field::summon(uint16 step, uint8 sumplayer, card* target, effect* proc, ui
deffect->owner = target;
deffect->code = EFFECT_DUAL_STATUS;
deffect->type = EFFECT_TYPE_SINGLE;
deffect->flag = EFFECT_FLAG_CANNOT_DISABLE;
deffect->flag = EFFECT_FLAG_CANNOT_DISABLE | EFFECT_FLAG_CLIENT_HINT;
deffect->description = 64;
deffect->reset_flag = RESET_EVENT + 0x1fe0000;
target->add_effect(deffect);
core.temp_var[0] = 0;
......
......@@ -16,12 +16,10 @@ function c15854426.initial_effect(c)
local e3=Effect.CreateEffect(c)
e3:SetCategory(CATEGORY_SPECIAL_SUMMON)
e3:SetDescription(aux.Stringid(15854426,0))
e3:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_TRIGGER_O)
e3:SetType(EFFECT_TYPE_SINGLE+EFFECT_TYPE_TRIGGER_O)
e3:SetProperty(EFFECT_FLAG_DELAY)
e3:SetRange(LOCATION_SZONE)
e3:SetCode(EVENT_LEAVE_FIELD)
e3:SetCode(15854426)
e3:SetCountLimit(1)
e3:SetCondition(c15854426.condition)
e3:SetTarget(c15854426.target)
e3:SetOperation(c15854426.operation)
e3:SetLabelObject(e2)
......@@ -31,19 +29,19 @@ function c15854426.cfilter(c,tp)
return c:IsControler(tp) and c:IsFaceup() and c:IsAttribute(ATTRIBUTE_WIND) and c:GetDestination()==LOCATION_HAND
end
function c15854426.check(e,tp,eg,ep,ev,re,r,rp)
if eg:IsExists(c15854426.cfilter,1,nil,tp) then e:SetLabel(1)
else e:SetLabel(0) end
end
function c15854426.condition(e,tp,eg,ep,ev,re,r,rp)
return e:GetLabelObject():GetLabel()==1
local c=e:GetHandler()
if c:GetFlagEffect(15854426)==0 and eg:IsExists(c15854426.cfilter,1,nil,tp) then
c:RegisterFlagEffect(15854426,RESET_EVENT+0x1fe0000+RESET_PHASE+PHASE_END,0,1)
Duel.RaiseSingleEvent(c,15854426,e,r,rp,0,0)
end
end
function c15854426.filter(c,e,tp)
return c:GetLevel()<=4 and c:IsAttribute(ATTRIBUTE_WIND)
return c:IsLevelBelow(4) and c:IsAttribute(ATTRIBUTE_WIND)
and c:IsCanBeSpecialSummoned(e,0,tp,false,false)
end
function c15854426.target(e,tp,eg,ep,ev,re,r,rp,chk)
if chk==0 then return e:GetHandler():IsRelateToEffect(e) and not e:GetHandler():IsStatus(STATUS_CHAINING)
and Duel.GetLocationCount(tp,LOCATION_MZONE)>0 and Duel.IsExistingMatchingCard(c15854426.filter,tp,LOCATION_DECK,0,1,nil,e,tp) end
if chk==0 then return e:GetHandler():IsRelateToEffect(e) and Duel.GetLocationCount(tp,LOCATION_MZONE)>0
and Duel.IsExistingMatchingCard(c15854426.filter,tp,LOCATION_DECK,0,1,nil,e,tp) end
Duel.SetOperationInfo(0,CATEGORY_SPECIAL_SUMMON,nil,1,tp,LOCATION_DECK)
end
function c15854426.operation(e,tp,eg,ep,ev,re,r,rp)
......
......@@ -56,7 +56,7 @@ function c23846921.arcanareg(c,coin)
e2:SetOperation(c23846921.thop)
e2:SetReset(RESET_EVENT+0x1ff0000)
c:RegisterEffect(e2)
c:RegisterFlagEffect(36690018,RESET_EVENT+0x1ff0000,0,1,coin)
c:RegisterFlagEffect(36690018,RESET_EVENT+0x1ff0000,EFFECT_FLAG_CLIENT_HINT,1,coin,63-coin)
end
function c23846921.skipcon(e,tp,eg,ep,ev,re,r,rp)
return ep==tp and e:GetHandler():GetFlagEffectLabel(36690018)==1
......
......@@ -46,7 +46,7 @@ function c34568403.arcanareg(c,coin)
e1:SetOperation(c34568403.spop)
e1:SetReset(RESET_EVENT+0x1ff0000)
c:RegisterEffect(e1)
c:RegisterFlagEffect(36690018,RESET_EVENT+0x1ff0000,0,1,coin)
c:RegisterFlagEffect(36690018,RESET_EVENT+0x1ff0000,EFFECT_FLAG_CLIENT_HINT,1,coin,63-coin)
end
function c34568403.spcon(e,tp,eg,ep,ev,re,r,rp)
return e:GetHandler():GetFlagEffectLabel(36690018)==1 and e:GetHandler():IsRelateToBattle()
......
......@@ -54,7 +54,7 @@ function c35781051.arcanareg(c,coin)
e2:SetOperation(c35781051.tgop)
e2:SetReset(RESET_EVENT+0x1ff0000)
c:RegisterEffect(e2)
c:RegisterFlagEffect(36690018,RESET_EVENT+0x1ff0000,0,1,coin)
c:RegisterFlagEffect(36690018,RESET_EVENT+0x1ff0000,EFFECT_FLAG_CLIENT_HINT,1,coin,63-coin)
end
function c35781051.spcon(e,tp,eg,ep,ev,re,r,rp)
return ep~=tp and e:GetHandler():GetFlagEffectLabel(36690018)==1
......
......@@ -74,7 +74,7 @@ function c5861892.arcanareg(c,coin)
e2:SetOperation(c5861892.negop)
e2:SetReset(RESET_EVENT+0x1ff0000)
c:RegisterEffect(e2)
c:RegisterFlagEffect(36690018,RESET_EVENT+0x1ff0000,0,1,coin)
c:RegisterFlagEffect(36690018,RESET_EVENT+0x1ff0000,EFFECT_FLAG_CLIENT_HINT,1,coin,63-coin)
end
function c5861892.thcon(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetHandler()
......
......@@ -65,7 +65,7 @@ function c60953118.arcanareg(c,coin)
e2:SetTargetRange(0,1)
e2:SetCondition(c60953118.rdcon2)
c:RegisterEffect(e2)
c:RegisterFlagEffect(36690018,RESET_EVENT+0x1ff0000,0,1,coin)
c:RegisterFlagEffect(36690018,RESET_EVENT+0x1ff0000,EFFECT_FLAG_CLIENT_HINT,1,coin,63-coin)
end
function c60953118.rdcon1(e)
return e:GetHandler():GetFlagEffectLabel(36690018)==1
......
......@@ -41,7 +41,7 @@ function c61175706.arcanareg(c,coin)
e1:SetReset(RESET_EVENT+0x1ff0000)
c:RegisterEffect(e1)
--
c:RegisterFlagEffect(36690018,RESET_EVENT+0x1ff0000,0,1,coin)
c:RegisterFlagEffect(36690018,RESET_EVENT+0x1ff0000,EFFECT_FLAG_CLIENT_HINT,1,coin,63-coin)
end
function c61175706.atktg(e,c)
return c:IsSetCard(0x5)
......
......@@ -71,7 +71,7 @@ function c62892347.arcanareg(c,coin)
e3:SetTarget(c62892347.distg)
e3:SetReset(RESET_EVENT+0x1ff0000)
c:RegisterEffect(e3)
c:RegisterFlagEffect(36690018,RESET_EVENT+0x1ff0000,0,1,coin)
c:RegisterFlagEffect(36690018,RESET_EVENT+0x1ff0000,EFFECT_FLAG_CLIENT_HINT,1,coin,63-coin)
end
function c62892347.distg(e,c)
local ec=e:GetHandler()
......
......@@ -3,8 +3,10 @@ function c69155991.initial_effect(c)
--destroy
local e1=Effect.CreateEffect(c)
e1:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
e1:SetProperty(EFFECT_FLAG_DELAY)
e1:SetRange(LOCATION_MZONE)
e1:SetCode(EVENT_CHAIN_SOLVED)
e1:SetCode(EVENT_CHAIN_SOLVING)
e1:SetCondition(c69155991.descon)
e1:SetOperation(c69155991.desop)
c:RegisterEffect(e1)
--to grave
......@@ -19,8 +21,11 @@ function c69155991.initial_effect(c)
e2:SetOperation(c69155991.tgop)
c:RegisterEffect(e2)
end
function c69155991.descon(e,tp,eg,ep,ev,re,r,rp)
return re:IsHasType(EFFECT_TYPE_ACTIVATE) or re:GetHandler():IsType(TYPE_MONSTER)
end
function c69155991.desop(e,tp,eg,ep,ev,re,r,rp)
if re:IsHasType(EFFECT_TYPE_ACTIVATE) or re:GetHandler():IsType(TYPE_MONSTER) then
if e:GetHandler():IsLocation(LOCATION_MZONE) and e:GetHandler():IsFaceup() then
Duel.Destroy(e:GetHandler(),REASON_EFFECT)
end
end
......
......@@ -80,7 +80,7 @@ function c69831560.arcanareg(c,coin)
e4:SetOperation(c69831560.desop2)
e4:SetReset(RESET_EVENT+0x17f0000)
c:RegisterEffect(e4)
c:RegisterFlagEffect(36690018,RESET_EVENT+0x1ff0000,0,1,coin)
c:RegisterFlagEffect(36690018,RESET_EVENT+0x1ff0000,EFFECT_FLAG_CLIENT_HINT,1,coin,63-coin)
end
function c69831560.macon(e)
return e:GetHandler():GetFlagEffectLabel(36690018)==1
......
......@@ -38,7 +38,7 @@ function c8396952.arcanareg(c,coin)
e1:SetOperation(c8396952.speop)
e1:SetReset(RESET_EVENT+0x1ff0000)
c:RegisterEffect(e1)
c:RegisterFlagEffect(36690018,RESET_EVENT+0x1ff0000,0,1,coin)
c:RegisterFlagEffect(36690018,RESET_EVENT+0x1ff0000,EFFECT_FLAG_CLIENT_HINT,1,coin,63-coin)
end
function c8396952.speop(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetHandler()
......
......@@ -10,24 +10,33 @@ function c95714077.initial_effect(c)
e2:SetDescription(aux.Stringid(95714077,0))
e2:SetProperty(EFFECT_FLAG_DELAY)
e2:SetCategory(CATEGORY_TOHAND+CATEGORY_SEARCH)
e2:SetType(EFFECT_TYPE_TRIGGER_O+EFFECT_TYPE_FIELD)
e2:SetRange(LOCATION_SZONE)
e2:SetCode(EVENT_CHAIN_SOLVING)
e2:SetType(EFFECT_TYPE_TRIGGER_O+EFFECT_TYPE_SINGLE)
e2:SetCode(95714077)
e2:SetCountLimit(1)
e2:SetCondition(c95714077.thcon)
e2:SetTarget(c95714077.thtg)
e2:SetOperation(c95714077.thop)
c:RegisterEffect(e2)
local e3=Effect.CreateEffect(c)
e3:SetType(EFFECT_TYPE_FIELD+EFFECT_TYPE_CONTINUOUS)
e3:SetProperty(EFFECT_FLAG_CANNOT_DISABLE)
e3:SetRange(LOCATION_SZONE)
e3:SetCode(EVENT_CHAIN_SOLVING)
e3:SetOperation(c95714077.regop)
c:RegisterEffect(e3)
end
function c95714077.thcon(e,tp,eg,ep,ev,re,r,rp)
return re:IsActiveType(TYPE_MONSTER) and re:GetHandler():IsSetCard(0x58)
function c95714077.regop(e,tp,eg,ep,ev,re,r,rp)
local c=e:GetHandler()
if re:IsActiveType(TYPE_MONSTER) and re:GetHandler():IsSetCard(0x58) and c:GetFlagEffect(95714077)==0 then
c:RegisterFlagEffect(95714077,RESET_EVENT+0x1fe0000+RESET_PHASE+PHASE_END,0,1)
Duel.RaiseSingleEvent(c,95714077,e,r,rp,0,0)
end
end
function c95714077.filter(c)
return c:IsSetCard(0x58) and c:IsLevelBelow(4) and c:IsAbleToHand()
end
function c95714077.thtg(e,tp,eg,ep,ev,re,r,rp,chk)
local c=e:GetHandler()
if chk==0 then return c:IsFaceup() and c:IsRelateToEffect(e) and not c:IsStatus(STATUS_CHAINING)
if chk==0 then return c:IsFaceup() and c:IsRelateToEffect(e)
and Duel.IsExistingMatchingCard(c95714077.filter,tp,LOCATION_DECK,0,1,nil) end
Duel.SetOperationInfo(0,CATEGORY_TOHAND,nil,1,tp,LOCATION_DECK)
end
......
......@@ -57,7 +57,7 @@ function c97452817.arcanareg(c,coin)
e2:SetOperation(c97452817.ctop)
e2:SetReset(RESET_EVENT+0x1ff0000)
c:RegisterEffect(e2)
c:RegisterFlagEffect(36690018,RESET_EVENT+0x1ff0000,0,1,coin)
c:RegisterFlagEffect(36690018,RESET_EVENT+0x1ff0000,EFFECT_FLAG_CLIENT_HINT,1,coin,63-coin)
end
function c97452817.spcon(e,tp,eg,ep,ev,re,r,rp)
return ep==tp and e:GetHandler():GetFlagEffectLabel(36690018)==1
......
......@@ -52,7 +52,7 @@ function c97574404.arcanareg(c,coin)
local e3=e2:Clone()
e3:SetCode(EFFECT_CANNOT_MSET)
c:RegisterEffect(e3)
c:RegisterFlagEffect(36690018,RESET_EVENT+0x1ff0000,0,1,coin)
c:RegisterFlagEffect(36690018,RESET_EVENT+0x1ff0000,EFFECT_FLAG_CLIENT_HINT,1,coin,63-coin)
end
function c97574404.dtcon(e)
return e:GetHandler():GetFlagEffectLabel(36690018)==1
......
......@@ -234,6 +234,7 @@ EFFECT_FLAG_NO_TURN_RESET =0x400000 --
EFFECT_FLAG_EVENT_PLAYER =0x800000 --
EFFECT_FLAG_OWNER_RELATE =0x1000000 --
EFFECT_FLAG_AVAILABLE_BD =0x2000000 --
EFFECT_FLAG_CLIENT_HINT =0x4000000 --
--========== Codes ==========
EFFECT_IMMUNE_EFFECT =1 --
EFFECT_DISABLE =2 --
......@@ -518,6 +519,7 @@ CHINT_CARD =2
CHINT_RACE =3
CHINT_ATTRIBUTE =4
CHINT_NUMBER =5
CHINT_DESC =6
--Hint Message
HINTMSG_RELEASE =500
HINTMSG_DISCARD =501
......
......@@ -28,6 +28,9 @@
!system 43 即将产生战斗伤害
!system 60 正面
!system 61 反面
!system 62 表效果适用中
!system 63 里效果适用中
!system 64 二重状态
!system 70 怪物卡
!system 71 魔法卡
!system 72 陷阱卡
......
......@@ -7,5 +7,5 @@ lastdeck = test
textfont = c:/windows/fonts/simsun.ttc 14
numfont = c:/windows/fonts/arialbd.ttf
serverport = 7911
lastip = 192.168.3.235
lastip = 192.168.2.100
lastport = 7911
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment