void CUIActorMenu::Show(bool status) { inherited::Show (status); if(status) { SetMenuMode (m_currMenuMode); PlaySnd (eSndOpen); m_ActorStateInfo->UpdateActorInfo (m_pActorInvOwner); }else { PlaySnd (eSndClose); SetMenuMode (mmUndefined); } m_ActorStateInfo->Show (status); }
/** * SToS - 手动逻辑处理 */ BOOL CNoGo::SToS(Point point) { Step tStep; //检查着法合法性 if (board[point.x][point.y] != EMPTY)//非空落点 return -1;//着法非法 //落子 board[point.x][point.y] = player; //填充临时着法 tStep.side = player;//填充棋手 tStep.point = point;//填充落点 stepStack.push(tStep);//临时着法压栈 count = -1;//输入完成 //刷新棋盘 InvalidateRect(hWnd, &rtBoard, FALSE); UpdateWindow(hWnd); //播放落子音效 PlaySnd(0); return 1;//着法成立 }
void CUIActorMenu::Hide() { inherited::Hide (); PlaySnd (eSndClose); SetMenuMode (mmUndefined); m_ActorStateInfo->Show (false); repack_ammo(); }
void CUITalkWnd::AddAnswer(const shared_str& text, LPCSTR SpeakerName) { //для пустой фразы вообще ничего не выводим if(text.size() == 0) return; PlaySnd (text.c_str()); bool i_am = (0 == xr_strcmp(SpeakerName, m_pOurInvOwner->Name())); UITalkDialogWnd->AddAnswer(SpeakerName,*CStringTable().translate(text),i_am); }
void CUIActorMenu::Show() { SetMenuMode (m_currMenuMode); inherited::Show (); PlaySnd (eSndOpen); m_ActorStateInfo->Show (true); m_ActorStateInfo->UpdateActorInfo (m_pActorInvOwner); ShowCallback(); }
void CUIInventoryWnd::EatItem(PIItem itm) { SetCurrentItem (NULL); if(!itm->Useful()) return; CActor *pActor = smart_cast<CActor*>(Level().CurrentEntity()); if(!pActor) return; SendEvent_Item_Eat (itm); PlaySnd (eInvItemUse); }
void fsSoundsMgr::Event(fsSoundsMgrEvent ev) { if (FALSE == m_bUseSounds) return; switch (ev) { case SME_DOWNLOADCOMPLETE: PlaySnd (m_strDownloadComplete); break; case SME_DOWNLOADADDED: PlaySnd (m_strDownloadAdded); break; case SME_NOACTIVEDOWNLOADS: PlaySnd (m_strNoActiveDownloads); break; case SME_DIALINGOK: PlaySnd (m_strDialingOK); break; case SME_DIALINGFAILED: PlaySnd (m_strDialingFailed); break; case SME_DOWNLOADFAILED: PlaySnd (m_strDownloadFailed); break; } }
void CUIInventoryWnd::ActivatePropertiesBox() { // Флаг-признак для невлючения пункта контекстного меню: Dreess Outfit, если костюм уже надет bool bAlreadyDressed = false; UIPropertiesBox.RemoveAll(); CMedkit* pMedkit = smart_cast<CMedkit*> (CurrentIItem()); CAntirad* pAntirad = smart_cast<CAntirad*> (CurrentIItem()); CEatableItem* pEatableItem = smart_cast<CEatableItem*> (CurrentIItem()); CCustomOutfit* pOutfit = smart_cast<CCustomOutfit*> (CurrentIItem()); //. CArtefact* pArtefact = smart_cast<CArtefact*> (CurrentIItem()); CWeapon* pWeapon = smart_cast<CWeapon*> (CurrentIItem()); CScope* pScope = smart_cast<CScope*> (CurrentIItem()); CSilencer* pSilencer = smart_cast<CSilencer*> (CurrentIItem()); CGrenadeLauncher* pGrenadeLauncher = smart_cast<CGrenadeLauncher*> (CurrentIItem()); CBottleItem* pBottleItem = smart_cast<CBottleItem*> (CurrentIItem()); bool b_show = false; if(!pOutfit && CurrentIItem()->GetSlot()!=NO_ACTIVE_SLOT && !m_pInv->m_slots[CurrentIItem()->GetSlot()].m_bPersistent && m_pInv->CanPutInSlot(CurrentIItem())) { UIPropertiesBox.AddItem("st_move_to_slot", NULL, INVENTORY_TO_SLOT_ACTION); b_show = true; } if(CurrentIItem()->Belt() && m_pInv->CanPutInBelt(CurrentIItem())) { UIPropertiesBox.AddItem("st_move_on_belt", NULL, INVENTORY_TO_BELT_ACTION); b_show = true; } if(CurrentIItem()->Ruck() && m_pInv->CanPutInRuck(CurrentIItem()) && (CurrentIItem()->GetSlot()==u32(-1) || !m_pInv->m_slots[CurrentIItem()->GetSlot()].m_bPersistent) ) { if(!pOutfit) UIPropertiesBox.AddItem("st_move_to_bag", NULL, INVENTORY_TO_BAG_ACTION); else UIPropertiesBox.AddItem("st_undress_outfit", NULL, INVENTORY_TO_BAG_ACTION); bAlreadyDressed = true; b_show = true; } if(pOutfit && !bAlreadyDressed ) { UIPropertiesBox.AddItem("st_dress_outfit", NULL, INVENTORY_TO_SLOT_ACTION); b_show = true; } //отсоединение аддонов от вещи if(pWeapon) { if(pWeapon->GrenadeLauncherAttachable() && pWeapon->IsGrenadeLauncherAttached()) { UIPropertiesBox.AddItem("st_detach_gl", NULL, INVENTORY_DETACH_GRENADE_LAUNCHER_ADDON); b_show = true; } if(pWeapon->ScopeAttachable() && pWeapon->IsScopeAttached()) { UIPropertiesBox.AddItem("st_detach_scope", NULL, INVENTORY_DETACH_SCOPE_ADDON); b_show = true; } if(pWeapon->SilencerAttachable() && pWeapon->IsSilencerAttached()) { UIPropertiesBox.AddItem("st_detach_silencer", NULL, INVENTORY_DETACH_SILENCER_ADDON); b_show = true; } if(smart_cast<CWeaponMagazined*>(pWeapon) && IsGameTypeSingle()) { bool b = (0!=pWeapon->GetAmmoElapsed()); if(!b) { CUICellItem * itm = CurrentItem(); for(u32 i=0; i<itm->ChildsCount(); ++i) { pWeapon = smart_cast<CWeaponMagazined*>((CWeapon*)itm->Child(i)->m_pData); if(pWeapon->GetAmmoElapsed()) { b = true; break; } } } if(b){ UIPropertiesBox.AddItem("st_unload_magazine", NULL, INVENTORY_UNLOAD_MAGAZINE); b_show = true; } } } //присоединение аддонов к активному слоту (2 или 3) if(pScope) { if(m_pInv->m_slots[PISTOL_SLOT].m_pIItem != NULL && m_pInv->m_slots[PISTOL_SLOT].m_pIItem->CanAttach(pScope)) { PIItem tgt = m_pInv->m_slots[PISTOL_SLOT].m_pIItem; UIPropertiesBox.AddItem("st_attach_scope_to_pistol", (void*)tgt, INVENTORY_ATTACH_ADDON); b_show = true; } if(m_pInv->m_slots[RIFLE_SLOT].m_pIItem != NULL && m_pInv->m_slots[RIFLE_SLOT].m_pIItem->CanAttach(pScope)) { PIItem tgt = m_pInv->m_slots[RIFLE_SLOT].m_pIItem; UIPropertiesBox.AddItem("st_attach_scope_to_rifle", (void*)tgt, INVENTORY_ATTACH_ADDON); b_show = true; } } else if(pSilencer) { if(m_pInv->m_slots[PISTOL_SLOT].m_pIItem != NULL && m_pInv->m_slots[PISTOL_SLOT].m_pIItem->CanAttach(pSilencer)) { PIItem tgt = m_pInv->m_slots[PISTOL_SLOT].m_pIItem; UIPropertiesBox.AddItem("st_attach_silencer_to_pistol", (void*)tgt, INVENTORY_ATTACH_ADDON); b_show = true; } if(m_pInv->m_slots[RIFLE_SLOT].m_pIItem != NULL && m_pInv->m_slots[RIFLE_SLOT].m_pIItem->CanAttach(pSilencer)) { PIItem tgt = m_pInv->m_slots[RIFLE_SLOT].m_pIItem; UIPropertiesBox.AddItem("st_attach_silencer_to_rifle", (void*)tgt, INVENTORY_ATTACH_ADDON); b_show = true; } } else if(pGrenadeLauncher) { if(m_pInv->m_slots[RIFLE_SLOT].m_pIItem != NULL && m_pInv->m_slots[RIFLE_SLOT].m_pIItem->CanAttach(pGrenadeLauncher)) { PIItem tgt = m_pInv->m_slots[RIFLE_SLOT].m_pIItem; UIPropertiesBox.AddItem("st_attach_gl_to_rifle", (void*)tgt, INVENTORY_ATTACH_ADDON); b_show = true; } } LPCSTR _action = NULL; if(pMedkit || pAntirad) { _action = "st_use"; } else if(pEatableItem) { if(pBottleItem) _action = "st_drink"; else _action = "st_eat"; } if(_action){ UIPropertiesBox.AddItem(_action, NULL, INVENTORY_EAT_ACTION); b_show = true; } //. if(pArtefact&&pArtefact->CanBeActivated()) //. UIPropertiesBox.AddItem("st_activate_artefact", NULL, INVENTORY_ACTIVATE_ARTEFACT_ACTION); if(!CurrentIItem()->IsQuestItem()){ UIPropertiesBox.AddItem("st_drop", NULL, INVENTORY_DROP_ACTION); b_show = true; if(CurrentItem()->ChildsCount()) UIPropertiesBox.AddItem("st_drop_all", (void*)33, INVENTORY_DROP_ACTION); } if(b_show) { UIPropertiesBox.AutoUpdateSize (); UIPropertiesBox.BringAllToTop (); Fvector2 cursor_pos; Frect vis_rect; GetAbsoluteRect (vis_rect); GetUICursor()->GetPos (cursor_pos.x, cursor_pos.y); cursor_pos.sub (vis_rect.lt); UIPropertiesBox.Show (vis_rect, cursor_pos); PlaySnd (eInvProperties); } }
/** * ProcessMove - 处理引擎消息 * @moveCmd: 着法信息 */ BOOL CNoGo::ProcessMove(char *moveCmd, char *curCmd, char *denCmd) { Step tStep; char *res; int pos = 0; int len = strlen("move "); curCmd[0] = denCmd[0] = '\0';//默认空命令 if ((res = strstr(moveCmd, "move")) == NULL)//寻找move关键字 { return 0;//未找到“move”关键字 } else { pos = (res - moveCmd); pos += len; //解析着法 tStep.point.x = moveCmd[pos] - BX; tStep.point.y = moveCmd[pos + 1] - BY; tStep.side = player; stepStack.push(tStep);//完整着法压栈 //判断是否符合规则 if (!FitRules()) { strcat(curCmd, "error\n"); stepStack.pop();//非法着法出栈 return -1;//行棋违规 } //落子 board[tStep.point.x][tStep.point.y] = tStep.side; //刷新棋盘 InvalidateRect(hWnd, &rtBoard, FALSE); UpdateWindow(hWnd); //播放落子音效 PlaySnd(0); //追加着法历史 ShowStepHis(moveCmd + pos); //生成命令串 sprintf(denCmd, "move %c%c\n", tStep.point.x + BX, tStep.point.y + BY); //累计步数 StepNum[player]++; //判断胜负 if (WinOrLose()) { strcat(denCmd, "end\n");//追加终盘命令 strcat(curCmd, "end\n"); return 2;//分出胜负 } //行棋换手 player = NEXTPLAYER(player); return 1;//获取成功 } return 0; }